웹 개발

블로그_02_첫 배포_오라클 인스턴스

작성자 : Heehyeon Yoo|2025-12-15
# Blog# 웹사이트# Next.js# Oracle Cloud

블로그를 웹에 올리고 싶어졌다

정보보호를 공부하면서 노션에 공부한 내용과 실습 기록, 발표 자료를 쌓기 시작했다.
혼자 공부하며 느낀 것과 배운 게 많았다. 이걸 웹에 올려 포트폴리오로도 쓰면 좋겠다는 생각이 들었다.
나아가 내가 어떤 사람인지 알려줄 수 있는(브랜딩을 위한) 일종의 베이스 캠프가 되면 좋겠다고 생각했다.
네이버나 티스토리, 워드프레스로 만들면 훨씬 편했을 것이다. 그래도 배운 걸 직접 써보고 싶었다.
무엇보다 내가 원하는 대로 커스텀하고 싶었다.
티스토리나 워드프레스도 어느 정도는 손볼 수 있지만 서비스에 종속되는 게 싫었다.
게다가 옵시디언으로 정리한 마크다운 자료가 많아서 그것들을 그대로 쓰려면 구조를 따로 맞추고 설정하는 것도 귀찮았다.
결국 결론은 하나였다.

정적 웹사이트 형태로 개인 블로그를 직접 만들어서 배포해보자.

어떻게 배포할까?

블로그 구축이 끝나고 몇 차례 테스트도 해본 뒤 배포 준비를 마무리하면서 가장 먼저 고민한 건 어디에 어떻게 배포할지였다.
Vercel 같은 간단한 서비스는 이미 여러 번 써봤다. 그래도 이번에는 서버 환경을 직접 만져보고 싶었고
나중에 정적 웹사이트에서 벗어나 다른 프로젝트도 쉽게 붙일 수 있으면 좋겠다고 생각했다.
그래서 Oracle Cloud Free Tier 인스턴스를 선택했다.
일단 비용 부담이 없었다. 실제 Linux 서버 환경을 쓸 수 있고 SSH 접속부터 포트 설정까지 직접 만질 수 있다.
이 정도는 나도 해볼 수 있겠다 싶었고 서버 환경을 직접 만져보지도 못하면 공부한 게 의미가 없지 않나 싶었다.
그래서 Oracle Cloud에 가입하고, Ubuntu 기반 인스턴스를 하나 생성했다.

서버에 코드 올리기

서버가 준비되자 가장 먼저 GitHub 레포지토리에 코드를 푸시했다.
이후 SSH로 서버에 접속한 후 서버에서 GitHub 레포지토리를 clone했다.

git clone https://github.com/username/blog.git

웹 서버 실행과 첫 실패

이 블로그는 Next.js 기반의 정적 사이트다.
로컬에서는 이미 잘 동작하고 있었기 때문에, 서버에서도 동일하게 실행하면 될 거라고 생각했다.

npm install
npm run build
npm start

그런데 서버 환경에서는 예상하지 못한 문제들이 하나씩 나왔다.
오라클 인스턴스 메모리가 넉넉하지 않아 빌드 시간이 오래 걸렸다.
실행은 됐지만 외부 접속이 되지 않는 문제도 있었다.

외부 접속 문제 — 포트와 방화벽

서버 안에서는 분명히 애플리케이션이 실행 중이었지만 브라우저에서 서버 IP로 접속하면 아무 반응이 없었다.
서버에서는 3000번 포트로 서비스가 떠 있었고 Oracle Cloud 보안 규칙에서도 해당 포트가 열려 있었다.
이렇게만 보면 아무런 문제가 없을 상황이었다.
심지어 서버 내부에서 curl http://localhost:3000로 요청해도 정상적으로 응답이 왔다.
그런데 외부에서는 접속이 되지 않았다.
iptables를 확인해보니 다음과 같이 출력됐다.

sudo iptables -L -n --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source          destination
1    ACCEPT     all  --  0.0.0.0/0       0.0.0.0/0    state RELATED,ESTABLISHED
2    ACCEPT     all  --  0.0.0.0/0       0.0.0.0/0
3    ACCEPT     all  --  0.0.0.0/0       0.0.0.0/0
4    ACCEPT     tcp  --  0.0.0.0/0       0.0.0.0/0    tcp dpt:22
→ 5    REJECT     all  --  0.0.0.0/0       0.0.0.0/0    reject-with icmp-host-prohibited
6    ACCEPT     tcp  --  0.0.0.0/0       0.0.0.0/0    tcp dpt:80
7    ACCEPT     tcp  --  0.0.0.0/0       0.0.0.0/0    tcp dpt:443
8    ufw-before-logging-input  all  --  0.0.0.0/0  0.0.0.0/0
9    ufw-before-input          all  --  0.0.0.0/0  0.0.0.0/0
10    ufw-after-input           all  --  0.0.0.0/0  0.0.0.0/0
11   ufw-after-logging-input   all  --  0.0.0.0/0  0.0.0.0/0
12   ufw-reject-input          all  --  0.0.0.0/0  0.0.0.0/0
---

어떻게 저렇게 설정됐는지는 잘 모르겠지만 중간에 뭔가 꼬인 것 같았다.
5번 규칙에서 REJECT 체인으로 빠지는 상황이라 뒤에 추가된 ACCEPT 규칙이 전혀 평가되지 않은 것이다.
REJECT 체인을 제거하고 맨 밑으로 옮기니 접속에 성공했다.

배포 후

이것저것 고칠 건 여전히 보였지만 Oracle Cloud 인스턴스로 개인 블로그를 웹에 올리는 데는 성공했다.
기쁜 마음도 잠시... 두 가지 마음에 안 드는 문제가 있었다.

  1. 노트 파일을 추가하거나 수정한 후에 이를 반영하기 위해 매번 서버에 접속해야 한다는 점
  2. 버그를 하나 수정하려고 코드를 수정하면 다시 빌드를 반복해야 하는 점
    특히 두 번째가 문제였다. 오라클 인스턴스 성능이 낮아서 빌드 한 번에 10분이 넘게 걸렸다.
    거기에 인스턴스 안에서 다른 작업을 같이 하고 있으면 빌드 중 서버가 뻗어버리기도 했다.
    이것을 해결해야 했다.